오라클은 데이터를 읽을때 Lock을 사용하지 않는다. 그래서 다른 DBMS보다 동시성 측면에서 우월하다고 볼 수 있다.
오라클 10g 부터 대기 이벤트(Wait Event)를 아래와 같이 분류 하였다.
SQL> select wait_class, count( * )
2 from v$event_name
3 group by wait_class
4 order by 1;
WAIT_CLASS COUNT( * )
\
WAIT_CLASS COUNT( * )
\
오라클에서 발생하는 Lock 경합의 대부분을 차지하는 enq : TM - contention 이벤트와 enq : TX - row lock contention 이벤트가
Cuncurrency 가 아닌 Application으로 분류 되어 있다.
SQL> select event#, name, wait_class from v$event_name
2 where name in ('enq: TM - contention','enq: TX - row lock contention');
EVENT# NAME WAIT_CLASS
\
183 enq: TX - row lock contention Application
대기 이벤트 중 SQL*Net break/reset to client 가 있는데 이것은 사용자가 수행한 SQL문이 존재하지 않는 테이블을 참조 하거나
사용자 정의함수/프로시저에서 처리(catch)하지 않은 에외상황(Exception)을 만났을 때 나타난다.
이것은 DBA이슈가 아닌 개발자 이슈임을 분명히 밝히고 있는 것이다.
근본적인 해법은 Application Logic에서 찾아야 한다.
동시에 실행되는 트랜잭션 수를 최대화 하면서도 입력, 수정, 삭제, 검색시 데이터의 무결성이 유지될 수 있도록 노력하는 것
데이터베이스 어플리케이션은 이들 트랜잭션이 서로 간섭을 일으키는 현상을 최소화 하면서 데이터의 일관성과 무결성이 보장되도록 개발되어야 한다.
그림2-1참조
{*}동시성 제어가 어려운 이유{*}
\- 동시성과 일관성이 트레이트 오프(trade-off) 관계에 있다.
\- 동시성을 높이려고 Lock의 사용을 최소화 하면 읽기 일관성을 유지하기 어렵고, 데이터 일관성을 높이기 위해 Lock을 많이 사용하면 동시성이 떨어진다.(그림참조)
어떤 업무를 처리하는 최소 단위를 트랜잭션이라 한다.
사전적 의미 [컴퓨터] 트랜잭션 (데이터 파일의 내용에 영향을 미치는 모든 거래)
: 트랜잭션의 더이상 분해가 불가능한 업무의 최소단위
: 트랜잭션 실행의 결과로 데이터베이스 상태가 모순되지 않는것
: 트랜잭션이 실행중에 생성하는 연산의 중간 결과는 다른 트랜잭션이 접근 할 수 없는것
: 트랜잭션이 일단 실행을 성공적으로 완료하면 결과는 데이터베이스에 영속적으로 저장되는 것
>> 트랜잭션 처리능력이 가장 기본적이고 핵심적인 요소이다.
이 처리 결과가 데이터의 일관성을 해치지 않도록 하기 위해 순차적 진행을 보장하는 직렬화 장치가 Lock 매커니즘 이다.
이에 오라클은 Undo 데이터를 활용한 독특한 읽기 일관성 모델을 사용하고 있다.
위 사용된 Image는 마소7월호에서 발췌하였습니다.